Authors: Dmitrii Kofanov, Vladimir Kozlov, Alexander Libman, Nikita Zakharov
Date: 21.08.2022



use "Covid_Russia_Regions_DATASET.dta" 


/*Main variables - description

election_proximity = full years until the election
election_approaching = 1 if election is close (in 2020/2021/2022), 0 if election is in 2023 or 2024

*monthly mortality data
covid = official covid-19 mortality in the current month divided by average death in the respective month of the previous 3 years
excess = excess mortality in the current month  divided by average death in the respective month over the previous 3 years
isolation = self-isolation index

*3-month averages
covid_m4_m6 = official covid-19 mortality in the April-June divided by average death in the April-June of the previous 3 years
excess_m4_m6 = excess mortality in the April-June divided by average death in the April-June of the previous 3 years
covid_m7_m9 = official covid-19 mortality in the July-September divided by average death in the July-September of the previous 3 years
excess_m7_m9 = excess mortality in the July-September divided by average death in the July-September of the previous 3 years

medic_m4_m6 = medic mortality in the April-June divided by average death in the April-June of the previous 3 years
isolation_m4_m6 = self-isolation index averaged over April to June

*5-month averages (policies estimation)
policies_m2_m6 = number of anti-covid policies introduced in the region between February and June

before = time dummy that equals 1 if the month is before there referendum (January to June in the dataset)

*variables from the balancing test (Table C1)
pop = log of population 
urb = share of urban population in %
life_exp = life expectancy at birth, years
inc2019 = average monthly income in 2019
gini2019 = regional Gini index in 2019
edu_prof = share of working age population with professional degree 
putin2018 = votes for Putin in the 2018 presidential election in the region

*variables from the balancing tests (Table C2) - subcomponents of the Titkov-Petrov index (higher value indicates more pro-democratic tendency)

dem_press = freedom of the press
dem_elec = quality of elections
dem_pol = political system
dem_plur = pluralism
dem_elli = local elites 
dem_corr = control of corruption
dem_civ = civil society 
dem_econ = economic liberalization 
dem_open = openness

mediazone_reply = indicates whether the regional authorities have responded to the request by an independent media (Mediazona) to disclose the preliminary statistics on aggregate mortality (= 1 if Mediazona received/published the data for the particular region)
mediazone_under = a difference between the preliminary all-cause mortality in the region in May disclosed by the local authorities and the published mortality data (for the month of May) after the referendum (percentage deviation in deaths compared to the previous 5 years)
 
*/

***Labels 
label var election_approaching "Elections approaching, dummy"
label var election_proximity "Elections proximity, full years"
label var covid_m4_m6 "Official COVID-19 mortality, % (April-June)"
label var covid_m7_m9 "Official COVID-19 mortality, % (July-September)"
label var excess_m4_m6 "Excess mortality, % (April-June)"
label var excess_m7_m9 "Excess mortality, % (July-September)"
label var excess_m2_m6 "Excess mortality, % (February-June)"

label var medic_m4_m6 "Medic mortality (April-June)"
label var policies_m2_m6 "Number of anti-COVID policies (February-June)"
label var isolation_m4_m6 "Self-isolation index (April-June)"
label var covid "Official COVID-19 mortality, %"
label var excess "Excess mortality, %"
label var isolation "Self-isolation index"
label var before "Before referendum"

label var month "Month"
label var id "Region_ID"
label var time_id "Time_ID"

label var mediazone_reply "Responsiveness"
label var mediazone_under "Under-reporting"

label variable underreporting "Under-reporting (May)"


***Graphical settings
grstyle clear
set scheme s2color
grstyle init
grstyle set plain, box
grstyle color background white
grstyle set color Set1
grstyle yesno draw_major_hgrid yes
grstyle yesno draw_major_ygrid yes
grstyle color major_grid gs8
grstyle linepattern major_grid dot
grstyle numstyle legend_cols 2
grstyle linestyle legend none
grstyle set legend 4, inside 
grstyle color ci_area gs12%50


***FIGURE 1 - Distribution of regions by the time distance to the ’governor’s election


graph bar (count) if month==1,   over(election_proximity )   ascategory asyvars ///
      bar(1, color(gs4%100)) bar(2, color(gs4%80)) bar(3, color(gs4%60)) bar(4, color(gs4%40)) bar(5, color(gs4%20)) bargap(16)  ///
      ytitle("Number of regions")   showyvars legend(off)  b1title("Full years until the governor's election")

graph export "Figure1_elections_histogram.png", as(png) replace

	  
***FIGURE 2 - Monthly dynamics of mortality rates in regions by the proximity to elections


capture egen cov_month_high=mean(covid) if election_approaching==1   , by(month)
capture egen cov_month_low=mean(covid) if election_approaching==0    , by(month)

capture egen exc_month_high=mean(excess) if election_approaching==1  , by(month)
capture egen exc_month_low=mean(excess) if election_approaching==0   , by(month)

 
twoway (line  cov_month_high  month if month>2 & month<10  & id==4, lcolor(red) lpattern(solid) )  ///
       (line  cov_month_low  month if month>2 & month<10 & id==1, lcolor(ebblue) lpattern(dash) )  ///
, xlabel( 3 "Mar" 4 "Apr" 5 "May" 6 "Jun" 7 "Jul" 8 "Aug" 9 "Sep"    )  /// 
yline(0, lcolor(gs0)) ylabel(0(1)5) ytitle("Percentage to the average mortality in the respective month over the past 3 years", size(small) ) ///
xline(6.5, lpattern(shortdash_dot) lcolor(black) )  xtitle("") name(cov_trend, replace) ylabel(0(1)5 ) ytick(0(1)5) ///
legend(order(1 "Elections in 2020-22" 2 "Elections in 2023-24" )  pos(11)   ) title("Panel A: Official COVID-19 mortality in 2020", size(medium) )

*graph export "covid_trend.png", as(png) replace

twoway (line  exc_month_high  month if month>2 & month<10  & id==4, lcolor(red) lpattern(solid) )  ///
       (line  exc_month_low  month if month>2 & month<10 & id==1, lcolor(ebblue) lpattern(dash) )  ///
, xlabel( 3 "Mar" 4 "Apr" 5 "May" 6 "Jun" 7 "Jul" 8 "Aug" 9 "Sep"    )  /// 
yline(0, lcolor(gs0)) ylabel(0(5)25)   ///
xline(6.5, lpattern(shortdash_dot) lcolor(black) )  xtitle("") name(exc_trend, replace) ///
legend(order(1 "Elections in 2020-22" 2 "Elections in 2023-24" ) pos(11)   ) title("Panel B: Excess mortality in 2020", size(medium) ) ///
ylabel(0(5)25) ytick(0(1)25) 

*graph export "excess_trend.png", as(png) replace

graph combine cov_trend exc_trend , col(2)  iscale(.72) ysize(3.5) xsize(5.5)  xcommon   ycommon  ///
		imargin(1 1 1 1) note("Note: 43 regions with governor's elections in 2020-22, 42 regions with elections in 2023-24.", size(vsmall) ) 

graph export "Figure2_time_trend.png", as(png) replace

graph drop cov_trend exc_trend
drop cov_month_high cov_month_low  exc_month_high exc_month_low   



***FIGURE 3 - MAIN RESULTS: The effect of election proximity on COVID-19 mortality and the response to the pandemic


eststo clear

eststo m1 : quietly reg covid_m4_m6 election_approaching excess_m4_m6 , ro
eststo m2 : quietly reg excess_m4_m6 election_approaching , ro
eststo m3 : quietly reg medic_m4_m6 election_approaching  excess_m4_m6 , ro
eststo m4 : quietly reg covid_m7_m9 election_approaching  excess_m7_m9 , ro
eststo m5 : quietly reg policies_m2_m6 election_approaching excess_m4_m6 , ro
eststo m6 : quietly reg isolation_m4_m6 election_approaching excess_m4_m6 , ro

eststo m11 : quietly reg covid_m4_m6 election_proximity excess_m4_m6 , ro
eststo m22 : quietly reg excess_m4_m6 election_proximity , ro
eststo m33 : quietly reg medic_m4_m6 election_proximity   excess_m4_m6 , ro
eststo m44 : quietly reg covid_m7_m9 election_proximity  excess_m7_m9 , ro
eststo m55 : quietly reg policies_m2_m6 election_proximity excess_m4_m6 , ro
eststo m66 : quietly reg isolation_m4_m6 election_proximity excess_m4_m6 , ro

/* *Tabular output:
esttab using "Table_Main_Results.txt", addnotes(Notes: t statistics in parentheses, * p < 0.1, ** p < 0.05, *** p < 0.01. Robust SE.) ///
	nogap star(* 0.1 ** 0.05 *** 0.01) r2 nonotes replace nocon b(2) se(2)   l  /// 
	ti("Table A: Official reporting of COVID-19 mortality before the referendum and proximity to elections") stats(N r2 ,fmt(0 2) label("Observations" R2)) 
*/

coefplot  ( m1 , mcolor(red%85) mcolor(red%85)  ciopts(color(red%85) )  mfcolor(white) xline(0, lcolor(black) lwidth(thin) lpattern(dash))  mlabel mlabposition(12) mlabgap(1)     mlabcolor(r%85) mlabsize(small)  ) ///
			( m11 , mcolor(green%85) mcolor(green%85)  ciopts(color(green%85) )  mfcolor(white) xline(0, lcolor(black) lwidth(thin) lpattern(dash))  mlabel mlabposition(12) mlabgap(1)     mlabcolor(r%85) mlabsize(small)  ) ,   bylabel("{bf:Panel A:}" "{bf: Official COVID-19 mortality, %}" "Before the referendum" "April-June 2020") || ///
			( m4 , mcolor(ebblue%85) mcolor(ebblue%85)  ciopts(color(ebblue%85) )  mfcolor(white) xline(0, lcolor(black) lwidth(thin) lpattern(dash))  mlabel mlabposition(12) mlabgap(1)     mlabcolor(r%85) mlabsize(small)  ) ///
			( m44 , mcolor(orange%85) mcolor(orange%85)  ciopts(color(orange%85) )  mfcolor(white) xline(0, lcolor(black) lwidth(thin) lpattern(dash)) mlabel mlabposition(12) mlabgap(1)     mlabcolor(r%85) mlabsize(small)  )   ,  bylabel("{bf:Panel B:}" "{bf: Official COVID-19 mortality, %}" "After the referendum" "July-September 2020")  || ///
			( m2 , mcolor(red%85) mcolor(red%85)  ciopts(color(red%85) )  mfcolor(white) xline(0, lcolor(black) lwidth(thin) lpattern(dash))  mlabel mlabposition(12) mlabgap(1)     mlabcolor(r%85) mlabsize(small)  ) ///
			( m22 , mcolor(green%85) mcolor(green%85)  ciopts(color(green%85) )  mfcolor(white) xline(0, lcolor(black) lwidth(thin) lpattern(dash))  mlabel mlabposition(12) mlabgap(1)     mlabcolor(r%85) mlabsize(small)  ) ,  bylabel("{bf:Panel C:}" "{bf: Excess mortality, %}" "Before the referendum" "April-June 2020")  || ///
			( m3 , mcolor(ebblue%85) mcolor(ebblue%85)  ciopts(color(ebblue%85) )  mfcolor(white) xline(0, lcolor(black) lwidth(thin) lpattern(dash))  mlabel mlabposition(12) mlabgap(1)     mlabcolor(r%85) mlabsize(small)  ) ///
			( m33 , mcolor(orange%85) mcolor(orange%85)  ciopts(color(orange%85) )  mfcolor(white) xline(0, lcolor(black) lwidth(thin) lpattern(dash)) mlabel mlabposition(12) mlabgap(1)     mlabcolor(r%85) mlabsize(small)  ), bylabel("{bf:Panel D:}" "{bf: Medic mortality, %}" "Before the referendum"  "April-June 2020") ||  ///
			( m5 , mcolor(green%85) mcolor(green%85)  ciopts(color(green%85) )  mfcolor(white) xline(0, lcolor(black) lwidth(thin) lpattern(dash))  mlabel mlabposition(12) mlabgap(1)     mlabcolor(r%85) mlabsize(small)  ) ///
			( m55 , mcolor(orange%85) mcolor(orange%85)  ciopts(color(orange%85) )  mfcolor(white) xline(0, lcolor(black) lwidth(thin) lpattern(dash)) mlabel mlabposition(12) mlabgap(1)     mlabcolor(r%85) mlabsize(small)  ), bylabel("{bf:Panel E:}" "{bf: Number of anti-COVID policies}" "Before the referendum"  "February-June 2020") ||  ///
			( m6 , mcolor(green%85) mcolor(green%85)  ciopts(color(green%85) )  mfcolor(white) xline(0, lcolor(black) lwidth(thin) lpattern(dash))  mlabel mlabposition(12) mlabgap(1)     mlabcolor(r%85) mlabsize(small)  ) ///
			( m66 , mcolor(orange%85) mcolor(orange%85)  ciopts(color(orange%85) )  mfcolor(white) xline(0, lcolor(black) lwidth(thin) lpattern(dash)) mlabel mlabposition(12) mlabgap(1)     mlabcolor(r%85) mlabsize(small)  ), bylabel("{bf:Panel F:}" "{bf: Self-Isolation, index}" "Before the referendum"  "April-June 2020")  ///	
				format(%-9.2f) mlabposition(13)  mlabgap(*2) mlabel("{it:p} = " + string(@pval,"%9.2f")) mlabcolor(black) ///
			xline(0, lcolor(black%35) lwidth(vthin) lpattern(dash)) yline(1.5,lcolor(black%75) lwidth(thin) )   /// 
			keep(election_approaching election_proximity    ) order(election_approaching election_proximity    ) ///
			name(results_main, replace)   ///
			 byopts(xrescale   scale(.69 ) col(2) legend(off) note("Notes: OLS regression; 95% CI; SE robust to heteroskedasticity; N=85. All estimations include excess mortality" /// 
			 "for April-June (Panel B: for July-September) as a control variable except Panel C where the dependent variable" "is excess mortality itself.", size(*.9)     )   )  ///
			ysize(4 ) xsize(3)  /// 
			coeflabel(election_approaching = "Elections approaching dummy" election_proximity =  "Election proximity in years" ,   notick labsize(medium) wrap(8) nobreak  angle(90)  )  
	
graph export "Figure3_main_results.png", as(png) replace width(4000)




*** TABLE 1 - PANEL RESULTS: Election proximity and reporting of the official COVID-19 mortality, panel estimation

 
eststo clear

eststo ols1: quietly xtreg covid excess c.excess#c.before c.election_approaching#c.excess c.election_approaching#c.excess#c.before    i.month    if  month>3 & month<10  , cl(id) fe
	estadd local Region_FE "Yes"
	estadd local Month_FE "Yes"
eststo gmm1: quietly xtabond2 covid excess  c.excess#c.before  c.election_approaching#c.excess c.election_approaching#c.excess#c.before   l.covid l.excess i.month if month>3 & month<10   , ///
	cl(id)  gmm(excess c.election_approaching#c.excess c.excess#c.before c.election_approaching#c.excess#c.before  l.covid l.excess   , lag(1 1)) iv(i.month)
	estadd local Region_FE "Yes"
	estadd local Month_FE "Yes"
 
eststo ols2: quietly xtreg covid excess c.excess#c.before c.election_proximity#c.excess  c.election_proximity#c.excess#c.before    i.month    if month>3 & month<10  , cl(id) fe
	estadd local Region_FE "Yes"
	estadd local Month_FE "Yes"
eststo gmm2: quietly xtabond2 covid excess  c.excess#c.before  c.election_proximity#c.excess  c.election_proximity#c.excess#c.before   l.covid l.excess i.month if month>3 & month<10   , ///
	cl(id)  gmm(excess c.election_proximity#c.excess c.excess#c.before c.election_proximity#c.excess#c.before  l.covid l.excess   , lag(1 1)) iv(i.month)
	estadd local Region_FE "Yes"
	estadd local Month_FE "Yes"

esttab using "Table1_election proximity_official COVID-19_panel.txt",   ///
	nogap star(* 0.1 ** 0.05 *** 0.01) r2   replace nocon b(2) se(2)  l  /// 
	ti("Table 1: Election proximity and reporting of the official COVID-19 mortality, panel estimation")   ///
	drop(_cons *.month) stats(Region_FE Month_FE  N N_g r2 ar2p hansenp j , fmt(1 1 0 0 2 2  2 0) l("Region FE" "Month FE" "Observations" "N of regions" "R squared" "AR(2)" "Hansen test (p-value)" "N of instrument" )) ///
	order(c.election_approaching#c.excess#c.before c.election_approaching#c.excess   c.election_proximity#c.excess#c.before c.election_proximity#c.excess  c.excess#c.before  excess  L.excess L.covid) ///
	addnotes("Notes: Standard errors clustered at regional level in parentheses, * p < 0.1, ** p < 0.05, *** p < 0.01")    



***FIGURE 4 - Marginal effects (plots) 


***For election proximity dummy
eststo: quietly xtabond2 covid excess  c.excess#c.before  c.election_approaching#c.excess c.election_approaching#c.excess#c.before  l.covid l.excess i.month if month>3 & month<10   , ///
	cl(id)  gmm(excess c.election_approaching#c.excess c.excess#c.before c.election_approaching#c.excess#c.before  l.covid l.excess   , lag(1 1)) iv(i.month)	  
margins , dydx(election_approaching)  at(excess=(0(1)100) before=(1))     

marginsplot,    yline(0, lcolor(red) lpattern(dash))    level(95)  /// 
		recast(line) recastci(rarea)      ///
		xtitle("Excess mortality, percentage", height(4)  )  plot1opts(lcolor(black%85))  ciopt(color(red%15) lpattern(solid) fintensity(50))      ///
		ytitle("Effects on linear prediction") ///
		title("Election approaching: Before referendum") xlabel(0(10)100)  ///
		name(figure4_dummy_before, replace)
 

eststo: quietly xtabond2 covid excess  c.excess#c.before  c.election_approaching#c.excess c.election_approaching#c.excess#c.before   l.covid l.excess i.month if month>3 & month<10   , ///
	cl(id)  gmm(excess c.election_approaching#c.excess c.excess#c.before c.election_approaching#c.excess#c.before  l.covid l.excess   , lag(1 1)) iv(i.month)	  
margins , dydx(election_approaching)  at(excess=(0(1)100) before=(0))     

marginsplot,    yline(0, lcolor(red) lpattern(dash))    level(95)  /// 
		recast(line) recastci(rarea)      ///
		xtitle("Excess mortality, percentage", height(4)  )  plot1opts(lcolor(black%85))  ciopt(color(red%15) lpattern(solid) fintensity(50))      ///
		ytitle("") ///		
		title("Election approaching: After referendum") xlabel(0(10)100)  ///
		name(figure4_dummy_after, replace)
 
 
***For election proximity years
eststo: quietly xtabond2 covid excess  c.excess#c.before  c.election_proximity#c.excess  c.election_proximity#c.excess#c.before   l.covid l.excess i.month if  month>3 & month<10   , ///
	cl(id)  gmm(excess c.election_proximity#c.excess c.excess#c.before c.election_proximity#c.excess#c.before  l.covid l.excess   , lag(1 1)) iv(i.month)
 
	margins , dydx(election_proximity)  at(excess=(0(1)100) before=(1))      

marginsplot,    yline(0, lcolor(ebblue) lpattern(dash))    level(95)  /// 
		recast(line) recastci(rarea)      ///
		xtitle("Excess mortality, percentage", height(4)  )  plot1opts(lcolor(black%85))  ciopt(color(ebblue%15) lpattern(solid) fintensity(50))      ///
		ytitle("Effects on linear prediction") ///
		title("Election proximity: Before referendum") xlabel(0(10)100) 	///
		name(figure4_year_before, replace)	
		
eststo: quietly xtabond2 covid excess  c.excess#c.before  c.election_proximity#c.excess  c.election_proximity#c.excess#c.before  l.covid l.excess i.month if month>3 & month<10   , ///
	cl(id)  gmm(excess c.election_proximity#c.excess c.excess#c.before c.election_proximity#c.excess#c.before  l.covid l.excess    , lag(1 1)) iv(i.month)
 
	margins , dydx(election_proximity)  at(excess=(0(1)100) before=(0))      

marginsplot,    yline(0, lcolor(ebblue) lpattern(dash))    level(95)  /// 
		recast(line) recastci(rarea)      ///
		xtitle("Excess mortality, percentage", height(4)  )  plot1opts(lcolor(black%85))  ciopt(color(ebblue%15) lpattern(solid) fintensity(50))      ///
		ytitle("") ///
		title("Election proximity: After referendum") xlabel(0(10)100) 	///
		name(figure4_year_after, replace)	
		
		
graph combine   figure4_dummy_before figure4_dummy_after  figure4_year_before figure4_year_after  , col(2)  iscale(.45) xcommon    ysize(8) xsize(9) imargin(1 1 1 1) note("{sub:Note: Conditional marginal effects with 95% CIs; GMM estimations as in Table 1: Columns (2) and (4) respectively.}", height(7))
graph export "Figure4_marginal_effects.png", as(png) replace width(4000)
	
capture graph drop figure4_dummy_before figure4_dummy_after  figure4_year_before figure4_year_after
 
 
 
***FIGURE 5 & 6 

*SEE THE CODE FOR THE SURVEY DATA 
 
 
 
  		
***FIGURE 7 - The association between month COVID-19 mortality on self-isolation and the moderation effect of the exposed under-reporting after the referendum

***Table E2 - Appendix E
eststo clear

eststo a1:   xtreg isolation    c.covid#i.month   i.month if  month>3      , cl(id) fe
eststo a2:   xtreg isolation  c.covid#i.month   7.month#c.covid#c.underreporting  8.month#c.covid#c.underreporting 9.month#c.covid#c.underreporting 10.month#c.covid#c.underreporting 11.month#c.covid#c.underreporting  i.month if  month>3     , cl(id) fe
 
esttab a1 a2 using "TableE2_covid_isolation.txt", addnotes(Notes: clustered SE at the regional level in parentheses, * p < 0.1, ** p < 0.05, *** p < 0.01.) ///
nogap star(* 0.1 ** 0.05 *** 0.01) r2 nonotes replace nocon b(4) se(4)    l   ///
ti("Table E2: Elasticity between self-isolation and mortality by month and the effect of the exposed under-reporting in May") stats(N r2 ,fmt(0 2) label("Observations" R2))  


*Graph Settings
grstyle clear
set scheme s2color
grstyle init
grstyle set plain, box
grstyle color background white
grstyle set color Set1
grstyle yesno draw_major_hgrid yes
grstyle yesno draw_major_ygrid yes
grstyle color major_grid gs8
grstyle linepattern major_grid dot
grstyle numstyle legend_cols 1
grstyle linestyle legend none
grstyle set legend 6,  
grstyle color ci_area gs12%50
 
***Plotting the coefficients: FIGURE 7
coefplot    (a1, mcolor(green%55) ciopt(color(green%55)) label("Correlation between official COVID-19 mortality and self-isolation index by month" )   ) /// 
	(a2,msymbol(S) mcolor(black%55) ciopt(color(black%55)) label("Correlation between official COVID-19 mortality and self-isolation index by month" "including the moderating effect of the under-reporting exposed after the referendum")) ///
	, drop(*.month _cons)    ///
	coeflabels(    4.month#c.covid = "April"   5.month#c.covid = "May" 6.month#c.covid = "June"  7.month#c.covid = "July" 8.month#c.covid = "August" 9.month#c.covid = "September" 10.month#c.covid = "October" 11.month#c.covid = "November" ///
	7.month#c.underreporting = "July" 8.month#c.underreporting = "August" 9.month#c.underreporting = "September" 10.month#c.underreporting = "October" 11.month#c.underreporting = "November" ///
	7.month#c.covid#c.underreporting = "July" 8.month#c.covid#c.underreporting = "August" 9.month#c.covid#c.underreporting = "September" 10.month#c.covid#c.underreporting = "October" 11.month#c.covid#c.underreporting = "November"    ) ///
  headings(5.month#c.covid ="{bf:COVID-19 mortality * Month}" 7.month#c.covid#c.underreporting = "{bf:Under-reporting * COVID-19 mortality* Month}"   , labcolor(black%100) labsize(small) labgap(0) angle(0)) ///
	xlabel(-.01(.01).07,labsize(small) )  ylabel(,labsize(small) labgap(1))  xline(0, lwidth(thin) lcolor(black) lpattern(shortdash ))  xsize(7)   scale(.77) 
 
graph export "Figure7_effect_on_isolation.png", as(png) replace width(4000)



**********************************APPENDIX B: Summary of the variables


***TABLE B1 - Summary statistics

		
***Summary statistics

eststo clear 
quietly: estpost summ election_approaching election_proximity covid_m4_m6 covid_m7_m9 excess_m4_m6 medic_m4_m6  /// 
		policies_m2_m6 isolation_m4_m6 covid excess  isolation   if month>3 & month<12

esttab using "TableB1_Summary.txt", m l  replace   cells( (count(fmt(0)) mean(fmt(2)) sd(fmt(2))  min(fmt(2)) max(fmt(2))) ) noobs note("") title("Table B1: Summary statistics of the main variables")
 
quietly: estpost summ   pop urb life_exp inc2019 gini2019 edu_prof putin2018   if month==6  

esttab using "TableB1_Summary.txt", m l  append   cells( (count(fmt(0)) mean(fmt(2)) sd(fmt(2))  min(fmt(2)) max(fmt(2))) ) noobs note("") title("Table B1 continued: Variables from the balance test: economic and political characteristics (Table C1)")
 
quietly: estpost summ   dem_*   if month==6  

esttab using "TableB1_Summary.txt", m l  append   cells( (count(fmt(0)) mean(fmt(2)) sd(fmt(2))  min(fmt(2)) max(fmt(2))) ) noobs note("") title("Table B1 continued: Variables from the balance test: institutional characteristics (Table C1)")
 
 
 
**********************************APPENDIX C: Balance tests


***TABLE C1 - Balance test by political and economic factors


label var inc2019 "Income"
label var gini2019 "Gini"
label var edu_prof "Education"
label var urb "Ubranization"
label var pop "Population"
label var life_exp "Life expectancy"
label var putin2018 "Putin votes"

eststo clear

eststo: quietly reg inc2019 election_approaching    if month==6, ro
eststo: quietly reg inc2019 election_proximity    if month==6, ro
eststo: quietly reg gini2019 election_approaching    if month==6, ro
eststo: quietly reg gini2019 election_proximity    if month==6, ro
eststo: quietly reg edu_prof election_approaching    if month==6, ro
eststo: quietly reg edu_prof election_proximity    if month==6, ro
eststo: quietly reg urb election_approaching    if month==6, ro
eststo: quietly reg urb election_proximity    if month==6, ro
eststo: quietly reg pop election_approaching    if month==6, ro
eststo: quietly reg pop election_proximity    if month==6, ro
eststo: quietly reg life_exp election_approaching    if month==6, ro
eststo: quietly reg life_exp election_proximity    if month==6, ro
eststo: quietly reg putin2018 election_approaching    if month==6, ro
eststo: quietly reg putin2018 election_proximity    if month==6, ro

esttab using "TableC1_randomization_soc_econ.txt", addnotes(Notes: t statistics in parentheses, * p < 0.1, ** p < 0.05, *** p < 0.01. Robust SE.) ///
nogap star(* 0.1 ** 0.05 *** 0.01) r2 nonotes replace nocon b(2) se(2)   l  /// 
ti("Table C1: Natural randomization of the approaching elections: economic and political factors") stats(N r2 ,fmt(0 2) label("Observations" R2)) ///
o( election_approaching election_proximity ) keep(election_approaching election_proximity )    

 
***TABLE C2 - Balance test by institutional factors


label var dem_press "Free press"
label var dem_elec "Election quality"
label var dem_pol "Political system"
label var dem_plur "Pluralism"
label var dem_elli "Local elites"
label var dem_corr "Corruption control"
label var dem_civ "Civil society"
label var dem_open "Openness"
label var dem_econ "Economic liberalisation"
 
eststo clear

eststo: quietly reg dem_press election_approaching    if month==6, ro
eststo: quietly reg dem_press election_proximity    if month==6, ro
eststo: quietly reg dem_elec election_approaching    if month==6, ro
eststo: quietly reg dem_elec election_proximity    if month==6, ro
eststo: quietly reg dem_pol election_approaching    if month==6, ro
eststo: quietly reg dem_pol election_proximity    if month==6, ro
eststo: quietly reg dem_plur election_approaching    if month==6, ro
eststo: quietly reg dem_plur election_proximity    if month==6, ro
eststo: quietly reg dem_elli election_approaching    if month==6, ro
eststo: quietly reg dem_elli election_proximity    if month==6, ro
eststo: quietly reg dem_corr election_approaching    if month==6, ro
eststo: quietly reg dem_corr election_proximity    if month==6, ro
eststo: quietly reg dem_civ election_approaching    if month==6, ro
eststo: quietly reg dem_civ election_proximity    if month==6, ro
eststo: quietly reg dem_open election_approaching    if month==6, ro
eststo: quietly reg dem_open election_proximity    if month==6, ro
eststo: quietly reg dem_econ election_approaching    if month==6, ro
eststo: quietly reg dem_econ election_proximity    if month==6, ro

esttab using "TableC2_randomization_institutional.txt", addnotes(Notes: t statistics in parentheses, * p < 0.1, ** p < 0.05, *** p < 0.01. Robust SE.) ///
nogap star(* 0.1 ** 0.05 *** 0.01) r2 nonotes replace nocon b(2) se(2)   l  /// 
ti("Table C2: Natural randomization of the approaching elections: institutional indices from democracy index by Petrov and Titkov (2013)") stats(N r2 ,fmt(0 2) label("Observations" R2)) ///
o( election_approaching election_proximity ) keep(election_approaching election_proximity )  


 
**********************************APPENDIX D: Regional response to an independent media request


***TABLE D1 - Disclosing preliminary all-cause mortality to an independent media outlet
label var mediazone_reply "Responsiveness"
label var mediazone_under "Under-reporting"


eststo clear

*all regions
eststo  : quietly reg mediazone_reply election_approaching   pop   , ro
eststo  : quietly reg mediazone_reply election_proximity    pop    , ro
*only regions with no excess mortality in May
eststo  : quietly reg mediazone_reply election_approaching   pop    if    l.excess!=0, ro
eststo  : quietly reg mediazone_reply election_proximity  pop  if l.excess!=0 , ro
*under-reporting as a difference between data disclosed to journalists and official mortality data published after the referendum
eststo  : quietly reg mediazone_under election_approaching pop    , ro
eststo  : quietly reg mediazone_under election_proximity  pop    , ro
 

esttab   using "TableD1_response_to_media.txt", addnotes("Note: Robust standard errors in parentheses, * p < 0.1, ** p < 0.05, *** p < 0.01. Excess mortality estimates are for the month of May. All regressions are performed using linear probabiility models, OLS.") ///
nogap star(* 0.1 ** 0.05 *** 0.01) r2 nonotes replace nocon b(2) se(2)    l  /// 
ti("Table D1: Disclosing preliminary all-cause mortality to an independent media outlet") stats(N r2 ,fmt(0 2) label("Observations" R2)) ///
o( election_approaching   election_proximity   pop )    


 
 


 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 